package cho114366.basic;

import cho114366.basic.J16cal.J16AdD;
import cho114366.basic.J16cal.J16Mul;

public class J16_Calculrator {

	public static void main(String[] args) {
		// 상속, 인터페이스, 기본클래스를 이용해서
		// 사칙연산을 수행하는 계산기 프로그램 작성
		J16AdD add =new J16AdD();
		add.setValues(3, 7);
		System.out.println(add.calculator());
		System.out.println(add.toString());
		J16Mul mul=new J16Mul();
		mul.setValues(30, 70);
		System.out.println(mul.toString());
		System.out.println(mul.calculator());
		
		J16cal c= new J16cal();
		c.setValues(10, 100);
		System.out.println(c.toString());
		System.out.println(c.calculator());
	
		c=new J16Mul();
		c.setValues(150, 25);
		System.out.println(mul.calculator());
		
		//+,* 연산을 위해
		//J16Add, J16Mul 객체를 생성했음
		//하지만, -, / dustksdmf dnlgo
		//J16Sub, J16Div 객체도 생성해야함
		//사칙연산을 위해 불필요한 객체를 생성하는
		//불편함, 낭비가 발생
		//해결책-상위 자료형 변환 업캐스팅upcasting을 이용
		
		
		//+,* 연산을 위해 J16Add, J16Mul의
		//부모인 J16Cal 객체만 생성
		//추후 -,/ 연산을위해
		//J16Sub,J16Div 객체를 생성하더라도
		//
	
	}// main

}// class

// 인터페이스

interface J16CalService {
	int calculator();

	void setValues(int a, int b);
}

// 클래스

class J16cal implements J16CalService {
	private int a;
	private int b;

	public J16cal() {

	}

	/*
	 * public J16cal(int a, int b) { this.a = a; this.b = b; }
	 */
	// 멤버변수 a,b 초기화 작업은
	// setvalue 메서드를 대신하므오
	// 생성자는 주석처리함

	public int getA() {
		int add = a + b;
		return add;
	}

	public void setA(int a) {
		this.a = a;
	}

	public int getB() {
		int sub = a - b;
		return sub;
	}

	public void setB(int b) {
		this.b = b;
	}

	public int getc() {
		int mul = a * b;
		return mul;
	}

	public void setc(int b) {
		this.b = b;
	}

	public int getd() {
		int div = a / b;
		return div;
	}

	public void setd(int b) {
		this.b = b;
	}

	@Override
	public String toString() {
		return "J16cal [a=" + a + ", b=" + b + "]";
	}

	@Override
	public int calculator() {
		// TODO Auto-generated method stub
		return 0;
	}

	@Override
	public void setValues(int a, int b) {
		this.a = a;
		this.b = b;

	}

	class J16AdD extends J16cal {
		@Override
		public int calculator() {

			return getA() + getB();
		
	}
	}

	class J16Mul extends J16cal {
		@Override
		public int calculator() {

			return getA() * getB();
		}
	}
}

	
